package co.jp.roomy;

import co.jp.roomy.vo.Heya;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class ColorpalletActivity extends Activity implements HSVCallback {

	private ImageView colorView;
	private TextView colorCode;
	private HueBarView hueBar;
	private SaturationBarView saturationBar;
	private ValueBarView valueBar;
	
	private Heya heya;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.colorpallet);

		Intent intent = getIntent();
		heya = (Heya)intent.getSerializableExtra(ColorpalletActivity.this.getString(R.string.heyaKey));

		colorView = (ImageView) findViewById(R.id.colorView);
		colorCode = (TextView) findViewById(R.id.colorCode);
		hueBar = (HueBarView) findViewById(R.id.hueBar);
		hueBar.setHSVCallback(this);
		saturationBar = (SaturationBarView) findViewById(R.id.saturationBar);
		saturationBar.setHSVCallback(this);
		valueBar = (ValueBarView) findViewById(R.id.valueBar);
		valueBar.setHSVCallback(this);
		
		// 部屋情報から色情報を取得しhsv変換する。
		float[] hsv = RGBtoHSV(heya.getHeyaColor());
		// 色画像を作成
		int color = Color.HSVToColor(hsv);
		Bitmap bitmap = Bitmap.createBitmap(new int[] { color }, 1, 1, Config.ARGB_8888);
		colorView.setImageBitmap(bitmap);
		
		colorCode.setText(String.valueOf(color)+ "@@@" + String.format("#%02x%02x%02x", Color.red(color), Color.green(color), Color.blue(color)));

		// バー画像を作成
		hueBar.setHSV(hsv);
		hueBar.invalidate();
		saturationBar.setHSV(hsv);
		saturationBar.invalidate();
		valueBar.setHSV(hsv);
		valueBar.invalidate();
	}

	@Override
	public void onChangeHSV(float[] hsv) {
		
		// 色画像を作成
		int color = Color.HSVToColor(hsv);
		Bitmap bitmap = Bitmap.createBitmap(new int[] { color }, 1, 1, Config.ARGB_8888);
		colorView.setImageBitmap(bitmap);
		
		colorCode.setText(String.valueOf(color)+ "@@@" + String.format("#%02x%02x%02x", Color.red(color), Color.green(color), Color.blue(color)));
		// 色情報を保存
		heya.setHeyaColor(String.format("#%02x%02x%02x", Color.red(color), Color.green(color), Color.blue(color)));

		// バー画像を作成
		hueBar.setHSV(hsv);
		hueBar.invalidate();
		saturationBar.setHSV(hsv);
		saturationBar.invalidate();
		valueBar.setHSV(hsv);
		valueBar.invalidate();
	}
	
	/**
	 * 色決定ボタン押下時
	 * @param View view
	 */
	public void colorAddButtonOnClick(View view) {
		Intent intent = new Intent(ColorpalletActivity.this, HeyaAddActivity.class);
		intent.putExtra(ColorpalletActivity.this.getString(R.string.heyaKey), heya);
		startActivity(intent);
	}
	
	/*
	 * RGBからHSVに変換する。(#FFFFFF)
	 * 
	 */
	static float[] RGBtoHSV(String rgb) {
		// １６進数から変換する。
		int red = Integer.decode( "0x" + rgb.substring(1, 3));
		int green = Integer.decode( "0x" + rgb.substring(3, 5));
		int blue = Integer.decode( "0x" + rgb.substring(5, 7));

		// 色相(Hue)、彩度(Saturation)、明度(Value)
		float[] hsv = new float[3];
		float max = Math.max(red, Math.max(green, blue));
		float min = Math.min(red, Math.min(green, blue));
		
		// 色相
		if(max == min){
			hsv[0] = 0;
		}
		else if(max == red){
			hsv[0] = (60 * (green - blue) / (max - min) + 360) % 360;
		}
		else if(max == green){
			hsv[0] = (60 * (blue - red) / (max - min)) + 120;
		}
		else if(max == blue){
			hsv[0] = (60 * (red - green) / (max - min)) + 240;   
		}
		
		// 彩度
		if(max == 0){
			hsv[1] = 0;
		}
		else{
			hsv[1] = (255 * ((max - min) / max));
		}
		
		// 明度
		hsv[2] = max;
		return hsv;
	}
}